#include "mnemonics.h"

char *mnemonics[] = {
/*    0 8           1 9            2 A           3 B              4 C           5 D            6 E           7 F */        
            "NOP",  "LD BC, %u",     "LD (BC), A",     "INC BC",         "INC B",      "DEC B",    "LD B, %u",       "RLCA", /* 0x00 - 0x07 */
    "LD (%u), SP", "ADD HL, BC",     "LD A, (BC)",     "DEC BC",         "INC C",      "DEC C",    "LD C, %u",       "RRCA", /* 0x08 - 0x0F */
           "STOP",  "LD DE, %u",     "LD (DE), A",     "INC DE",         "INC D",      "DEC D",    "LD D, %u",        "RLA", /* 0x10 - 0x17 */
     "JR (PC+%u)", "ADD HL, DE",     "LD A, (DE)",     "DEC DE",         "INC E",      "DEC E",    "LD E, %u",        "RRA", /* 0x18 - 0x1F */
 "JR NZ, (PC+%u)",  "LD HL, %u",    "LDI (HL), A",     "INC HL",         "INC H",      "DEC H",    "LD H, %u",        "DAA", /* 0x20 - 0x27 */
  "JR Z, (PC+%u)", "ADD HL, HL",    "LDI A, (HL)",     "DEC HL",         "INC L",      "DEC L",    "LD L, %u",        "CPL", /* 0x28 - 0x2F */
 "JR NC, (PC+%u)",  "LD SP, %u",    "LDD (HL), A",     "INC SP",      "INC (HL)",     "DEC HL", "LD (HL), %u",        "SCF", /* 0x30 - 0x37 */
  "JR C, (PC+%u)", "ADD HL, SP",    "LDD A, (HL)",     "DEC SP",         "INC A",      "DEC A",    "LD A, %u",        "CCF", /* 0x38 - 0x3F */
        "LD B, B",    "LD B, C",        "LD B, D",    "LD B, E",       "LD B, H",    "LD B, L",  "LD B, (HL)",    "LD B, A", /* 0x40 - 0x47 */
        "LD C, B",    "LD C, C",        "LD C, D",    "LD C, E",       "LD C, H",    "LD C, L",  "LD C, (HL)",    "LD C, A", /* 0x47 - 0x4F */
        "LD D, B",    "LD D, C",        "LD D, D",    "LD D, E",       "LD D, H",    "LD D, L",  "LD D, (HL)",    "LD D, A", /* 0x57 - 0x57 */
        "LD E, B",    "LD E, C",        "LD E, D",    "LD E, E",       "LD E, H",    "LD E, L",  "LD E, (HL)",    "LD E, A", /* 0x58 - 0x5F */
        "LD H, B",    "LD H, C",        "LD H, D",    "LD H, E",       "LD H, H",    "LD H, L",  "LD H, (HL)",    "LD H, A", /* 0x60 - 0x67 */
        "LD L, B",    "LD L, C",        "LD L, D",    "LD L, E",       "LD L, H",    "LD L, L",  "LD L, (HL)",    "LD L, A", /* 0x68 - 0x6F */
     "LD (HL), B", "LD (HL), B",     "LD (HL), B", "LD (HL), B",    "LD (HL), B", "LD (HL), B",        "HALT", "LD (HL), A", /* 0x70 - 0x77 */
        "LD A, B",    "LD A, C",        "LD A, D",    "LD A, E",       "LD A, H",    "LD A, L",  "LD A, (HL)",    "LD A, A", /* 0x78 - 0x7F */
       "ADD A, B",   "ADD A, C",       "ADD A, D",   "ADD A, E",      "ADD A, H",   "ADD A, L", "ADD A, (HL)",   "ADD A, A", /* 0x80 - 0x87 */
       "ADC A, B",   "ADC A, C",       "ADC A, D",   "ADC A, E",      "ADC A, H",   "ADC A, L", "ADC A, (HL)",   "ADC A, A", /* 0x88 - 0x8F */
          "SUB B",      "SUB C",          "SUB D",      "SUB E",         "SUB H",      "SUB L",    "SUB (HL)",      "SUB A", /* 0x90 - 0x97 */
       "SBC A, B",   "SBC A, C",       "SBC A, D",   "SBC A, E",      "SBC A, H",   "SBC A, L", "SBC A, (HL)",   "SBC A, A", /* 0x98 - 0x9F */
          "AND B",      "AND C",          "AND D",      "AND E",         "AND H",      "AND L",    "AND (HL)",      "AND A", /* 0xA0 - 0xA7 */
          "XOR B",      "XOR C",          "XOR D",      "XOR E",         "XOR H",      "XOR L",    "XOR (HL)",      "XOR A", /* 0xA8 - 0xAF */
           "OR B",       "OR C",           "OR D",       "OR E",          "OR H",       "OR L",     "OR (HL)",       "OR A", /* 0xB0 - 0xB7 */
           "CP B",       "CP C",           "CP D",       "CP E",          "CP H",       "CP L",     "CP (HL)",       "CP A", /* 0xB8 - 0xBF */
         "RET NZ",     "POP BC",    "JP NZ, (%u)",    "JP (%u)", "CALL NZ, (%u)",    "PUSH BC",   "ADD A, %u",     "RST 0H", /* 0xC0 - 0xC7 */
          "RET Z",        "RET",     "JP Z, (%u)",     /*CB*/"",  "CALL Z, (%u)",  "CALL (%u)",   "ADC A, %u",     "RST 8H", /* 0xC8 - 0xCF */
         "RET NC",     "POP DE",    "JP NC, (%u)",     /*NO*/"", "CALL NC, (%u)",    "PUSH DE",      "SUB %u",    "RST 10H", /* 0xD0 - 0xD7 */
          "RET C",       "RETI",     "JP C, (%u)",     /*NO*/"",  "CALL C, (%u)",  /*DD NO*/"", "SBC A, (%u)",    "RST 18H", /* 0xD8 - 0xDF */
"LD (FF00+%u), A",     "POP HL", "LD (FF00+C), A",     /*NO*/"",        /*NO*/"",    "PUSH HL",    "AND (%u)",    "RST 20H", /* 0xE0 - 0xE7 */
     "ADD SP, %d",    "JP (HL)",     "LD (%u), A",     /*NO*/"",        /*NO*/"",  /*ED NO*/"",      "XOR %u",    "RST 28H", /* 0xE8 - 0xEF */
"LD A, (FF00+%u)",     "POP AF", "LD A, (FF00+C)",         "DI",        /*NO*/"",    "PUSH AF",       "OR %u",    "RST 30H", /* 0xF0 - 0xF7 */
 "LD HL, SP + %d",  "LD SP, HL",     "LD A, (%u)",         "EI",        /*NO*/"",  /*FD NO*/"",       "CP %u",    "RST 38H"  /* 0xF8 - 0xFF */
};

OP_PARAMS instruction_params[] =
{ {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0},
  {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0},
  {3,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0},
  {3,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {2,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {3,0,0}, {3,0,0}, {3,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {3,0,0}, {0,0,0}, {3,0,0}, {3,0,0}, {2,0,0}, {1,0,0},
  {1,0,0}, {1,0,0}, {3,0,0}, {0,0,0}, {3,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {3,0,0}, {0,0,0}, {3,0,0}, {0,0,0}, {2,0,0}, {1,0,0},
  {2,0,0}, {1,0,0}, {1,0,0}, {0,0,0}, {0,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {3,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {2,0,0}, {1,0,0},
  {3,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {0,0,0}, {1,0,0}, {2,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {3,0,0}, {1,0,0}, {0,0,0}, {0,0,0}, {2,0,0}, {1,0,0}
};


char *cb_mnemonics[] = 
{    "RLC B",    "RLC C",    "RLC D",    "RLC E",    "RLC H",    "RLC L",    "RLC (HL)",    "RLC A",
     "RRC B",    "RRC C",    "RRC D",    "RRC E",    "RRC H",    "RRC L",    "RRC (HL)",    "RRC A",
     "RL B",     "RL C",     "RL D",     "RL E",     "RL H",     "RL L",     "RL (HL)",     "RL A",
     "RR B",     "RR C",     "RR D",     "RR E",     "RR H",     "RR L",     "RR (HL)",     "RR A",
     "SLA B",    "SLA C",    "SLA D",    "SLA E",    "SLA H",    "SLA L",    "SLA (HL)",    "SLA A",
     "SRA B",    "SRA C",    "SRA D",    "SRA E",    "SRA H",    "SRA L",    "SRA (HL)",    "SRA A",
     "SWAP B",   "SWAP C",   "SWAP D",   "SWAP E",   "SWAP H",   "SWAP L",   "SWAP (HL)",   "SWAP A",
     "SRL B",    "SRL C",    "SRL D",    "SRL E",    "SRL H",    "SRL L",    "SRL (HL)",    "SRL A",
     "BIT 0, B", "BIT 0, C", "BIT 0, D", "BIT 0, E", "BIT 0, H", "BIT 0, L", "BIT 0, (HL)", "BIT 0, A", 
     "BIT 1, B", "BIT 1, C", "BIT 1, D", "BIT 1, E", "BIT 1, H", "BIT 1, L", "BIT 1, (HL)", "BIT 1, A", 
     "BIT 2, B", "BIT 2, C", "BIT 2, D", "BIT 2, E", "BIT 2, H", "BIT 2, L", "BIT 2, (HL)", "BIT 2, A", 
     "BIT 3, B", "BIT 3, C", "BIT 3, D", "BIT 3, E", "BIT 3, H", "BIT 3, L", "BIT 3, (HL)", "BIT 3, A", 
     "BIT 4, B", "BIT 4, C", "BIT 4, D", "BIT 4, E", "BIT 4, H", "BIT 4, L", "BIT 4, (HL)", "BIT 4, A", 
     "BIT 5, B", "BIT 5, C", "BIT 5, D", "BIT 5, E", "BIT 5, H", "BIT 5, L", "BIT 5, (HL)", "BIT 5, A", 
     "BIT 6, B", "BIT 6, C", "BIT 6, D", "BIT 6, E", "BIT 6, H", "BIT 6, L", "BIT 6, (HL)", "BIT 6, A", 
     "BIT 7, B", "BIT 7, C", "BIT 7, D", "BIT 7, E", "BIT 7, H", "BIT 7, L", "BIT 7, (HL)", "BIT 7, A", 
     "RES 0, B", "RES 0, C", "RES 0, D", "RES 0, E", "RES 0, H", "RES 0, L", "RES 0, (HL)", "RES 0, A", 
     "RES 1, B", "RES 1, C", "RES 1, D", "RES 1, E", "RES 1, H", "RES 1, L", "RES 1, (HL)", "RES 1, A", 
     "RES 2, B", "RES 2, C", "RES 2, D", "RES 2, E", "RES 2, H", "RES 2, L", "RES 2, (HL)", "RES 2, A", 
     "RES 3, B", "RES 3, C", "RES 3, D", "RES 3, E", "RES 3, H", "RES 3, L", "RES 3, (HL)", "RES 3, A", 
     "RES 4, B", "RES 4, C", "RES 4, D", "RES 4, E", "RES 4, H", "RES 4, L", "RES 4, (HL)", "RES 4, A", 
     "RES 5, B", "RES 5, C", "RES 5, D", "RES 5, E", "RES 5, H", "RES 5, L", "RES 5, (HL)", "RES 5, A", 
     "RES 6, B", "RES 6, C", "RES 6, D", "RES 6, E", "RES 6, H", "RES 6, L", "RES 6, (HL)", "RES 6, A", 
     "RES 7, B", "RES 7, C", "RES 7, D", "RES 7, E", "RES 7, H", "RES 7, L", "RES 7, (HL)", "RES 7, A",
     "SET 0, B", "SET 0, C", "SET 0, D", "SET 0, E", "SET 0, H", "SET 0, L", "SET 0, (HL)", "SET 0, A", 
     "SET 1, B", "SET 1, C", "SET 1, D", "SET 1, E", "SET 1, H", "SET 1, L", "SET 1, (HL)", "SET 1, A", 
     "SET 2, B", "SET 2, C", "SET 2, D", "SET 2, E", "SET 2, H", "SET 2, L", "SET 2, (HL)", "SET 2, A", 
     "SET 3, B", "SET 3, C", "SET 3, D", "SET 3, E", "SET 3, H", "SET 3, L", "SET 3, (HL)", "SET 3, A", 
     "SET 4, B", "SET 4, C", "SET 4, D", "SET 4, E", "SET 4, H", "SET 4, L", "SET 4, (HL)", "SET 4, A", 
     "SET 5, B", "SET 5, C", "SET 5, D", "SET 5, E", "SET 5, H", "SET 5, L", "SET 5, (HL)", "SET 5, A", 
     "SET 6, B", "SET 6, C", "SET 6, D", "SET 6, E", "SET 6, H", "SET 6, L", "SET 6, (HL)", "SET 6, A", 
     "SET 7, B", "SET 7, C", "SET 7, D", "SET 7, E", "SET 7, H", "SET 7, L", "SET 7, (HL)", "SET 7, A"
};
